package com.cn.unarmed.wheelview;

import android.view.View;


import com.cn.unarmed.activity.R;

import java.util.Arrays;
import java.util.Calendar;
import java.util.List;

public class WheelMain {

    private View view;
    private WheelView wv_year;
    private WheelView wv_month;
    private WheelView wv_day;
    private WheelView wv_hours;
    private WheelView wv_mins;
    private static int START_YEAR = 1900, END_YEAR = 2100;
    private static int END_Month, END_day;

    private int year_now, month_now, day_now;
    private int month_old, year_old;

    public View getView() {
        return view;
    }

    public void setView(View view) {
        this.view = view;
    }

    public static int getSTART_YEAR() {
        return START_YEAR;
    }

    public static void setSTART_YEAR(int sTART_YEAR) {
        START_YEAR = sTART_YEAR;
    }

    public static int getEND_YEAR() {
        return END_YEAR;
    }

    public static void setEND_YEAR(int eND_YEAR) {
        END_YEAR = eND_YEAR;
    }

    public WheelMain(View view) {
        super();

        this.view = view;
        setView(view);
    }

    /**
     * @Description: TODO 弹出日期时间选择器
     */
    public void initDateTimePicker() {
        Calendar calendar = Calendar.getInstance();
        final int year = calendar.get(Calendar.YEAR);
        final int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DATE);
        END_YEAR = year;
        END_Month = month;
        END_day = day;
        year_now = year;
        month_now = month;

        // 添加大小月月份并将其转换为list,方便之后的判断
        String[] months_big = {"1", "3", "5", "7", "8", "10", "12"};
        String[] months_little = {"4", "6", "9", "11"};

        final List<String> list_big = Arrays.asList(months_big);
        final List<String> list_little = Arrays.asList(months_little);

        // 年
        wv_year = (WheelView) view.findViewById(R.id.year);
        wv_year.setAdapter(new NumericWheelAdapter(START_YEAR, END_YEAR));// 设置"年"的显示数据
        wv_year.setCyclic(true);// 可循环滚动
//		wv_year.setLabel("年");// 添加文字
        wv_year.setCurrentItem(year - START_YEAR);// 初始化时显示的数据

        // 月
        wv_month = (WheelView) view.findViewById(R.id.month);
        if (year == END_YEAR) {
            wv_month.setAdapter(new NumericWheelAdapter(1, month));
        } else {
            wv_month.setAdapter(new NumericWheelAdapter(1, 12));
        }

        wv_month.setCyclic(true);
//		wv_month.setLabel("月");
        wv_month.setCurrentItem(month - 1);

        // 日
        wv_day = (WheelView) view.findViewById(R.id.day);
        wv_day.setCyclic(true);
        // 判断大小月及是否闰年,用来确定"日"的数据
        if (year == END_YEAR && month == END_Month) {
            wv_day.setAdapter(new NumericWheelAdapter(1, day));
        } else {
            if (list_big.contains(String.valueOf(month + 1))) {
                wv_day.setAdapter(new NumericWheelAdapter(1, 31));
            } else if (list_little.contains(String.valueOf(month + 1))) {
                wv_day.setAdapter(new NumericWheelAdapter(1, 30));
            } else {
                // 闰年
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
                    wv_day.setAdapter(new NumericWheelAdapter(1, 29));
                else
                    wv_day.setAdapter(new NumericWheelAdapter(1, 28));
            }
        }
//		wv_day.setLabel("日");
        wv_day.setCurrentItem(day - 1);


        // 添加"年"监听
        OnWheelChangedListener wheelListener_year = new OnWheelChangedListener() {
            public void onChanged(WheelView wheel, int oldValue, int newValue) {
                int year_num = newValue + START_YEAR;
                int year_num_old = oldValue + START_YEAR;
                year_old = year_num_old;
                year_now = year_num;
                // 判断大小月及是否闰年,用来确定"日"的数据
                if (year_now == END_YEAR) {
                    wv_month.setAdapter(new NumericWheelAdapter(1, END_Month));
                    wv_month.setCurrentItem(END_Month - 1);
                }
                if (year_old == END_YEAR) {
                    wv_month.setAdapter(new NumericWheelAdapter(1, 12));
                    wv_month.setCurrentItem(0, true);
                }
                else {
                    if (year_now != END_YEAR && year_old != END_YEAR && year_now != year_old) {
                        wv_month.setAdapter(new NumericWheelAdapter(1, 12));
                        wv_month.setCurrentItem(0);
                    }
                    if (list_big
                            .contains(String.valueOf(wv_month.getCurrentItem() + 1))) {
                        wv_day.setAdapter(new NumericWheelAdapter(1, 31));
                    } else if (list_little.contains(String.valueOf(wv_month
                            .getCurrentItem() + 1))) {
                        wv_day.setAdapter(new NumericWheelAdapter(1, 30));
                    } else {
                        if ((year_num % 4 == 0 && year_num % 100 != 0)
                                || year_num % 400 == 0) {
                            wv_day.setAdapter(new NumericWheelAdapter(1, 29));
                        } else {
                            wv_day.setAdapter(new NumericWheelAdapter(1, 28));
                        }

                    }
                }
            }
        };
        // 添加"月"监听
        OnWheelChangedListener wheelListener_month = new OnWheelChangedListener() {
            public void onChanged(WheelView wheel, int oldValue, int newValue) {
                int month_num = newValue + 1;
                int month_num_old = oldValue + 1;
                month_now = month_num;
                month_old = month_num_old;

                if (month_num == END_Month ) {
                    if (year_now == END_YEAR){
                        wv_day.setAdapter(new NumericWheelAdapter(1, END_day));
                        wv_day.setCurrentItem(END_day+1, true);
                    }
                } else {
                    if (month_num != END_Month && month_old != month_now) {
                        wv_day.setCurrentItem(0);
                    }
                    // 判断大小月及是否闰年,用来确定"日"的数据
                    if (list_big.contains(String.valueOf(month_num))) {
                        wv_day.setAdapter(new NumericWheelAdapter(1, 31));
                    } else if (list_little.contains(String.valueOf(month_num))) {
                        wv_day.setAdapter(new NumericWheelAdapter(1, 30));
                        wv_day.setCurrentItem(0);
                    } else {
                        if (((wv_year.getCurrentItem() + START_YEAR) % 4 == 0 && (wv_year
                                .getCurrentItem() + START_YEAR) % 100 != 0)
                                || (wv_year.getCurrentItem() + START_YEAR) % 400 == 0) {
                            wv_day.setAdapter(new NumericWheelAdapter(1, 29));
                            wv_day.setCurrentItem(0);
                        } else {
                            wv_day.setAdapter(new NumericWheelAdapter(1, 28));
                            wv_day.setCurrentItem(0);
                        }

                    }
                }
            }
        };
        wv_year.addChangingListener(wheelListener_year);
        wv_month.addChangingListener(wheelListener_month);

        // 根据屏幕密度来指定选择器字体的大小
        int textSize = 0;

        textSize = 45;

        wv_day.TEXT_SIZE = textSize;
        wv_month.TEXT_SIZE = textSize;
        wv_year.TEXT_SIZE = textSize;

    }

    public String getTime() {
        StringBuffer sb = new StringBuffer();
        sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-")
                .append((wv_month.getCurrentItem() + 1)).append("-")
                .append((wv_day.getCurrentItem() + 1));
        return sb.toString();
    }
}
